JS에서 Argument 처리 구조
함수가 호출되면, 함수 안에서 arguments 오브젝트를 만든다. 그리고 argument 오브젝트에, 파라미터를 key-value 형태로 저장한다, 그러나 우리는 함수 호출시에 key 값을 따로 명시해주지 않는다.
js 엔진은, 0부터 파라미터 수만큼 key값을 부여하여 k/v 형태로 Argument 오브젝트에 저장한다. 이러한 형태를 Array-like라고 부른다.
function get() {
return arguments;
}
console.log(get("A", "B"));
//=> {0 : A, 1 : B}
엔진의 파라미터 처리
Array-like적인 argument 처리
- key 값이 0부터 1씩 증가한다.
- length 프로퍼티가 있어야 한다.
var get = function (one) {
return one;
};
get(77, 100);
- get() 함수를 호출하면서 77,100을 파라미터 값으로 넘긴다.
- 넘겨받은 값을 함수의 파라미터 이름에 설정
- one 과 77이 맵핑된다.
- lexical environment에 선언적 환경 레코드에 {one:77} 형태로 저장된다.(scope에 저장하는 것이다.)
- return one 문장을 실행할 때는, one을 가지고 선언적 환경 레코드로 가서 식별자 해결을 한다. one이 scope에 존재하면 그 값을 가져와서 return 하는 것임
- argument 오브젝트를 생성한다.
- 파라미터수를 argument 오브젝트의 length 프로퍼티로 추가
- 넘겨받은 파라미터 수 만큼 반복하면서 array-like한 동작
- {0:77}, {1:100} 형태로 argument 오브젝트에 저장한다.
이 모든 과정은 함수의 초기화 단계에서 실행한다.